package com.chisheng.caa.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.lang.Nullable;

import java.io.File;
import java.util.Calendar;

import static java.util.Calendar.*;

/**
 * 文件工具类
 */
public final class FileUtil {

    private FileUtil() {
        throw new UnsupportedOperationException();
    }

    /**
     * 返回随机文件名。使用 UUID 作为文件名。
     *
     * @param suffix 文件名后缀（可选）
     * @return 文件名
     */
    public static String genName(@Nullable String suffix) {
        String name = IdUtil.fastSimpleUUID();
        if (StrUtil.isEmpty(suffix)) {
            return name;
        }
        return String.format("%s.%s", name, suffix);
    }

    /**
     * 返回按时间生成文件的路径。即 year/month/day 形式。
     *
     * @return 时间路径
     */
    public static String genDatePath() {
        Calendar date = Calendar.getInstance();
        return join(date.get(YEAR), date.get(MONTH), date.get(DAY_OF_MONTH));
    }

    /**
     * 路径拼接
     *
     * @param args 字符序列
     * @return 拼接路径
     */
    public static String join(Object... args) {
        if (args.length == 0) return "";
        StringBuilder sb = new StringBuilder();
        for (Object arg : args) sb.append(arg).append(File.separator);
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    /**
     * 创建文件夹
     *
     * @param file 文件夹文件
     * @return 是否创建成功
     */
    public static boolean mkdirs(File file) {
        return file.mkdirs();
    }

    /**
     * 获取文件名后缀
     *
     * @param filename 文件名
     * @return 后缀
     */
    public static String getSuffix(String filename) {
        return cn.hutool.core.io.FileUtil.getSuffix(filename);
    }

}
